home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / dev / asm / Asm_Course2.lha / Teil06.TXT < prev    next >
Text File  |  1992-09-02  |  13KB  |  320 lines

  1.           A S S E M B L E R - K U R S       (c)  Jeff Kandle 1990
  2.  
  3.                                  6.Teil...
  4.  
  5. So,leute...ich habe mal ein ganz klein bisschen pause gemacht..damit ich
  6. nicht verroste, und ein paar effekte `gebaut`, die werde ich euch
  7. warscheinlich beibringen.
  8.  
  9. Hmmmh, weiter mit dem raster....Wie gesagt werden wir erstmal das Ding von
  10. demletzt bearbeiten. Und zwar in der Form, das es erstmal weicher wird, und
  11. nicht so Flackert, und zweitens das wir mal ein Schwingen in die Sache
  12. bringen.
  13.  
  14. Wie gesagt, es ist besser wenn ihr das ausgedruckt vor den Augen habt. Ich
  15. kann zwar aus dem Kopf erzaehlen was geaendert werden muss, schliesslich
  16. habe ich das ding ja Programmiert, aber ihr muesstet es schon sehen, denn
  17. einfach nur tippen und starten is scheisse. Wenn einer aber absolut keine
  18. Moeglichkeit hat, dem werde ich es zuschicken, ich glaube aber das jeder
  19. irgendeinen kennt der Druckern kann.
  20.  
  21. Ja, pack mers Buam
  22.  
  23. So, das erste was wir aendern wollen ist das es weicher zieht. Das mit der
  24. Verzoegerungsschleife is` wohl jedem Klar..Aber wir koennen auch auf etwas
  25. anderes warten. Wir sollten da etwas nehmen was zuverlaessig immer an der
  26. gleichen position abfragbar ist, und was immer in gleichen abstaeden
  27. Passiert....
  28. Die uhr...noe geht nicht...die schalten wir bei der Interrupt sperre direkt
  29. mit aus..da tut sich nichts mehr.
  30. Aber den Bildschirm, wir sind mit dem Prozessoer zwar nicht so gut dran wie
  31. mit dem Copper, aber fuer eine Abfrage reicht es allemal.
  32. Vorher muesste ihr aber noch wissen das es im oberen bildschirmbereich ein
  33. paar Zeilen gibt indenen der Amiga und der Copper usw. nichts machen, dort
  34. koennen wir uns hervorragend `Einklinken`, man nennt es den Vertikal
  35. Blanking bereich....Wie fragen wir das aber ab ?
  36. Nun wir haben im Amiga ein Schoenes register..es nennt sich VHposr und
  37. liegt in $DFF006, wir koennen dort X- und Y-position des Rasterstrahls
  38. abfragen, dazu brauchen wir aber einen neuen befehl.
  39.  
  40. Compare Kurz CMP
  41.  
  42. Um uns die sache leicht zu machen, vergleichen wir Direkt, das heisst Wert
  43. mit Speicherstelle, und sieht dann so aus
  44.  
  45. Cmpi.B #$00,VHposr
  46.  
  47. Das i hinter dem Cmp befehl muss bei allen Befehlen eingegeben werden wenn
  48. sie so Direct arbeiten. z.b. Addi, Subi usw.
  49. Also koennen wir das schon mal anstelle der #$5000 wartreschhleife im
  50. Source einfuegen ....
  51. So, jetzt wollen wir uns mal mit der Routine fuer die Bewegung befassen.
  52. Was macht sie Eigentlich...hmmm nicht viel, sie addiert die Positionen der
  53. Wait befehle in der Copperliste nur das das naechste mal bis eine zeile
  54. tiefer gewartet wird. Das macht sie mit `Add`.
  55. Es waere aber nicht viel schwerer eine Tabelle anzufertigen, in der halt
  56. eine menge positionen stehen, die man dann einfach ausliesst, und jeden
  57. durchlauf ein weiteres element nimmt.
  58. Is wohl klar oder ?
  59. Also zur Technik...keine bange, ich mache das mit den Mitteln die euch
  60. schon zur verfuegung stehen.
  61. Wir machen uns erstmal eine Tabelle, anhand dieser tabelle kann ich die
  62. weiteren Sachen die noetig sind viel besser erklaeren. Bei dem
  63. Programmierstil ist es egal wieviele Elemente die tabelle hat, das
  64. erleichter die sache ungemein.
  65. Erstmal die Tabelle, sie besteht der einfachheit halber erstmal aus dem
  66. Ganzen Wait-befehl Datum...Hinterher werden wir dann mit Bytes arbeiten,
  67. und durch manipulation in der Bitebene, die sache auf die richtige position
  68. bringen...Also, here she comes
  69.  
  70.  
  71. Dc.w $500f,$500f,$500f,$500f,$510f,$510f,$510f,$520f,$520f,$530f,$540f
  72. Dc.w $550f,$570f,$590f,$570f,$550f,$540f,$530f,$520f,$520f,$510f,$510f
  73. Dc.w $510f,$500f,$500f,$500f,$500f,$500f
  74.  
  75.  
  76. Wie ihr vielleicht seht hoert die tabelle so auf wie sie angefangen hat,
  77. sie ist eine Cyklus-tabelle.
  78. Sie soll ein Titschbewegung des Balkens hervorrufen.
  79.  
  80. So, um diese Bewegung zu ermoeglichen muessen wir jetzt nur noch jeden
  81. bildschirm durchlauf eine neue position aus der tabelle nehmen..und schon
  82. titscht das ding.
  83. Also, wie koennten wir das machen...Wir nehmen am besten einen Indirekten
  84. zeiger, setzen ihn auf das erste Element der Tabelle, und lassen ihn
  85. durchlaufen, er holt sich dan das erste element..sobald das passiert ist
  86. setzen wir den Zeiger auf das naechtse Element...u.s.w.  sobald das letzte
  87. Element erreicht ist setzen wir den zeiger einfach wieder auf das naechste
  88. Element....Ja, das ist relativ einfach...aber Programmtechnisch schwerer
  89. als mein Zweiter Vorschlag zu diesem thema.
  90.  
  91. Wir lesen `Bei Jedem` durchlauf immer der erste Element der Tabelle, und
  92. bearbeiten es. Dann lassen wir die Tabelle Rotieren, indem wir das erste
  93. Element irgendwo zwischen speichern, und das zweite Element an die Stelle
  94. des Ersten setzen, dann das dritte an die Stelle des Zweiten usw. sobald
  95. wir dann das letzte an die Stelle des vorletzten kopiert haben schreiben
  96. wir das gerettete erste an die letzte position geschrieben haben, haben wir
  97. die Tabelle rotieren lassen...Das hat den Vorteil wenn wir die tabelle von
  98. mehreren stellen auslesen lassen, das wir nicht Hunderttausend zeiger
  99. Stellen und abfragen muessen, denn das ist eine Menge aufwand...Jetzt kommt
  100. das geaenderte listing....Die tabelle koennt ihr auch selber eingeben, ihr
  101. muesst dann nur den Counter-wert im Programmsource auf Tabellenlaenge in
  102. worten -2 worten stellen....
  103.  
  104.  
  105. Execbase = 4
  106. Openlibrary = -552
  107. CIAapra = $BFE001
  108. Cop1lc  = $DFF080
  109. Forbid = -132
  110. Permit = -138
  111. VHposr = $DFF006
  112.  
  113. Start:  move.l Execbase,a6
  114.         jsr Forbid(a6)
  115.         clr.l d0
  116.         lea gfxname,a1
  117.         jsr Openlibrary(a6)
  118.         move.l d0,gfxbase
  119.         move.l #copperliste,Cop1lc
  120.  
  121. Vonvorne:
  122.         LEA COPPERLISTE,A0
  123.         LEA SINTABLE,a1
  124.  
  125. Wait:   CMPI.B #$80,VHPOSR
  126.         BNE.S WAIT
  127.         MOVE.W 18(A1),d0
  128.         MOVE.W D0,4(a0)
  129.         ADD.W #$200,D0
  130.         MOVE.W D0,12(a0)
  131.         BSR.S TABLEROTATE
  132.  
  133.         Btst #6,CIAapra
  134.         Bne.s vonvorne
  135.  
  136.         Move.l gfxbase,a0
  137.         Move.l 38(a0),Cop1lc
  138.  
  139.         Jsr Permit(a6)
  140.         Clr.l d0
  141.         Rts
  142.  
  143. Tablerotate:
  144.         Move.l #sintable,a2     ; Holt sich tabellenzeiger
  145.         Move.l a2,a3            ; zweiter zeiger nach a3
  146.         Add.l #2,a3             ; zweiter zeiger auf naechstes Element
  147.         Move.w #25,d0           ; Counter
  148.         Move.w (a2),a4          ; Erstes wort retten
  149. roloop:
  150.         Move.w (a3)+,(a2)+
  151.         dbf d0,roloop
  152.         move.w a4,(a2)          ; Erstes wort-> unten dran
  153.         rts
  154.  
  155. Gfxname:        dc.b "graphics.library",0
  156. even
  157. Gfxbase:        dc.l 0
  158. Copperliste:
  159. dc.w $0180,$0000
  160. dc.w $200f,$fffe
  161. dc.w $0180,$0f00
  162. dc.w $220f,$fffe
  163. dc.w $0180,$0000
  164.  
  165. copperlistenende:
  166. dc.l $-2                ; ende der copperliste , -2 = $fffffffe
  167.  
  168. Sintable:
  169. Dc.w $500f,$500f,$500f,$500f,$510f,$510f,$510f,$520f,$520f,$530f,$540f
  170. Dc.w $550f,$570f,$590f,$570f,$550f,$540f,$530f,$520f,$520f,$510f,$510f
  171. Dc.w $510f,$500f,$500f,$500f,$500f,$500f
  172.  
  173.  
  174. Natuerlich koennt ihr das listing ausschneiden, oder ihr tippt einfach die
  175. aenderungen in euer Grundprogramm ein, wie ihr es macht is egal..hauptsache
  176. ihr habt es verstanden.
  177.  
  178. So, nachdem wir Copperlistenverwaltungen und Copperlisten manipulation
  179. gelernt haben, koennten wir eigentlich weitergehen oder....
  180. Wir verlassen jetzt mal wieder das kapitel `Manipulationen an der Laufenden
  181. Copperliste`, und gehen weiter mit dem Copper....Wir werden jetzt ein paar
  182. tolle sachen machen, und dann machen wir weiter mit den Effekten...Aber
  183. glaubt mir....Mit ! Bild! im hintergrund sehen die Effekte nochmal so doll
  184. aus....
  185.  
  186. 10.Konvertierung von IFF-ILBM Dateien ins RAW-Format
  187.  
  188. Endlich...jetzt kommen wir mal zu einer Sache die nicht so viel mit
  189. Maschinensprache zutun hat, dafuer aber um so mehr mit Intros und Demos.
  190.  
  191. Wir wollen naehmlich mal ein Bild auf den Bildschirm bringen...
  192. Ich ueberlege mir gerade ob wir erst Malen oder erst das programm entwerfen
  193. sollen......Hmmmm, ich wuerde sagen - malen wir erstmal.
  194.  
  195. O.k, Deluxepaint 3.0 ist schnell zur hand, oder wer Dpaint 3.21 hat ist
  196. natuerlich besser dran, denn es hat eine Funktion die ich sehr zu schaetzen
  197. weiss, naehmlich die Umschaltung PAL->NTSC.. Naja wir malen auf jeden Fall
  198. im PAL-modus, und leider erstmal nur mit einer (2) farben, und im LO-RES
  199. modus...Also Stellt im Dpaint Menu bitte alles dafuer ein...
  200.  
  201. Also, was ihr jetzt malt ist mir Wurscht...Hauptsache es gefaellt euch.
  202. Wenn es fertig ist...abspeichern...Dpaint verlassen und rein in den
  203. Kefrens-IFF-converter...was dahinten hat den noch einer nicht, kann ich mir
  204. garnicht vorstellen...wenn das einer von sich auch sagen kann, schreibe er
  205. mir bitte einen kleinen brief, ich werde ihm das teil dann in den
  206. Briefkasten pumpen...
  207.  
  208. O.k...gehen wir mal davon aus das jeder den hat...
  209.  
  210. Starten..So jetzt seht ihr viele Knoepfe und so..ihr geht erstmal auf den,
  211. auf dem `CD DF0:` und drueckt solange drauf bis dort das laufwerk steht auf
  212. dem die Diskette mit `EUREM` bild liegt. Dann lasst ihr diesen in ruh.
  213. Nun druecken auf `READ DIR`, ratter...ratter... jetzt liegt die Directory
  214. in dem Klitzekleinen Fenster ober Rechts.
  215. Die bedienung kennt ihr ja...klickt euer bild an, und geht auf `LOAD`
  216. Nach kurzer Zeit muesste euer Bild auf dem Bildschirm erscheinen...Was ? es
  217. ist nicht ganz drauf, fehlt ein stueck...dann benutzt mal die
  218. Cursortasten..Schoen nicht.?
  219.  
  220. So jetzt gehen wir zum Konvertieren.
  221. Ihr seht oben ein Kleines Knoepfchen `IFF-ILBM`..das ist ja das was ihr
  222. eingeladen habt, drueckt da jetzt einmal drauf. Jetzt muesste da RAW-NORM`
  223. stehen..gut !
  224.  
  225. Jetzt geht ihr auf das ding Daneben, da drueckt ihr drauf bis da `BEFORE`
  226. steht. Es bezieht sich auf die Colormap, sie ist dafuer da damit man die
  227. genauen farben des Bildes hat und sie nicht aus der Palette von Dpaint
  228. abschreiben muss, toll was ?
  229.  
  230. So jetzt muesst ihr dem Bild, das jetzt schon konvertiert ist noch einen
  231. neuen Namen geben, dazu geht ihr in das laengliche Fenster unter den
  232. Koordinaten, Drueckt mit der Maus drauf, und gebt einen Namen ein.
  233. Dann geht ihr nur noch auf `SAVE` und fertig seid ihr mit dem Konvertieren.
  234.  
  235. Ich wuerde euch gerne die ganzen funktionen dieses ganz fantastischen
  236. konverters erklaeren, aber die sind alle sehr schwer zu verstehen, und es
  237. hat erst sinn wenn ihr den Blitter kennt, und das dauert noch etwas.
  238.  
  239. So nachdem wir das Bild abgespeicher haben, muesste es genau 10244 bytes
  240. lang sein, falls nicht habt ihr etwas falsch gemacht.....
  241.  
  242. Probiert es nochmal....
  243.  
  244. So nachdem das Bild die richtige laenge hat, koennen wir die noetigen
  245. Schritte zur darstellung durch den Computer besprechen...
  246.  
  247. So, gehen wir mal durch was der Amiga wissen muss...
  248. 1. Modus des dargestellten Bildes
  249.  
  250. Unter Modus versteht man ob Ham, Hi-Res, Lo-Res oder Interlace, zwischen
  251. den 4 Modi koennen wir waehlen. Dazu dient das BPLcon0-register bei
  252. $DFF100.
  253.  
  254. 2. Anzahl der Planes
  255. Zur einstellung der Planesanzahl benutzt man ebenfalls das BPLcon0
  256. register.
  257.  
  258. Erstmal ein kleiner einschub zum Thema Raw-format und darstellung der
  259. Farben und so.
  260.  
  261. Manche Computer haben Tolle Grafik Modi mit 32 oder 16 farben.
  262. Man waehlt dann diesen modus aus und arbeitet darin, der noetige Platz im
  263. speicher ist immer derselbe, egal ob ich jetzt alle 16 oder nur Zwei farben
  264. brauche.
  265. Beim Amiga ist es anders...wir koennen in Jedem der Obengenannten Modi,
  266. noch die Anzahl der Planes eingeben, diese bestimmt dann die Anzahl der
  267. Farben.
  268.  
  269. 1 Plane = 2 Farben
  270. 2 Planes = 4 Farben
  271. 3 Planes = 8 Farben
  272. 4 Planes = 16 Farben
  273. 5 Planes = 32 Farben
  274. 6 Planes = 64 Farben (allerdings Extra-Half-Bright modus)
  275.  
  276. Man kann sich so sein Bild nach bedarf reservieren, nach dem Motto, Warum
  277. soll ich fuer 32 Farben platz machen wenn ich nur 4 brauche.
  278.  
  279. Also, das mit den Planes sieht so aus..es sind die Vollen 320*256 Bits, mit
  280. denen wir auch gemalt haben (ich beziehe das jetzt erstmal auf das Bild
  281. was ihr malen solltet). Da gibt es nur Punkt gesetzt oder nicht gesetzt.
  282. Also zwei kombinationen. Wenn ich von Oben auf so eine Plane gucke dann
  283. sehe ich nur 0 oder 1, also zwei Farben.
  284. Jetzt kommt eine Zweite Plane ins spiel. Der Amiga stellt diese dann genau
  285. unter der Ersten dar. Wenn ich jetzt auf ein Bit gucke,gibt es ja 4
  286. kombinationen, also auch vier Farben, 00 01 10 11, sind die Kombinationen.
  287. Wenn ihr jetzt halt 5 Planes habt dann habt ihr auch 32 Kombinationen.
  288. Die Kombinationen, geben als Bitkombination immer einen Wert, und der wert
  289. stellt dann die farben dar. Also bei 2 Planes wuerde die Kombi.. 10, die
  290. Zweite farbe darstellen, welche das ist muss man dem Programmierer
  291. Ueberlassen, den Farben kann man setzen wie man will, wenn man erstmal den
  292. Copper in seiner Hand hat.
  293.  
  294. Nach dem Wir jetzt Modus und farbenanzahl gewaehlt haben, muessen wir dem
  295. Amiga noch sagen wie gross unser Bild ist. Da der Amiga den Ganzen
  296. Bildschirm als Grafikbildschirm benutzen kann muessen wir das Fenster, auch
  297. genannt `Playfield` fuer das bild ermitteln.
  298. Dazu geben wir ecken oben Links, und unten rechts an, und wieviel vom
  299. linken rand die darstellung anfaengt und wieviel vom Rechten Rand sie
  300. aufhoert.
  301.  
  302. Die werte fuer unser Bild...Pal sind
  303.  
  304. DiwStrt = $3081
  305. DiwStop = $30c1
  306. Ddfstrt = $0038
  307. Ddfstop = $00d0
  308.  
  309. Und ins Bitplane-Controll-registern (BPLcon0)
  310.  
  311. Kommt $1200
  312.  
  313. 1 fuer eine Plane, und die 2 steht fuer Lores...
  314.  
  315. Mehr im Naechsten Teil....
  316.  
  317. So long
  318.  
  319.                 Jeff Kandle
  320.